const Koa = require('koa');
const requireDirectory = require('require-directory');
const Router = require('koa-router');

const app = new Koa();

requireDirectory(module, './api/v1', {visit/*每当requireDirectory加载到一个文件时,都会调用该回调函数*/: whenLoadModule});

function whenLoadModule(m) {
  if (m instanceof Router) {
    // 如果这样访问 [OPTIONS]http://localhost:3000/v1/test2/latest
    // 返回-> Not Found (Status:404 Not Found)
    // 或则访问任何我们没有设置过的方法, [我们没有设置的方法]http://localhost:3000/v1/test2/latest
    // 都会返回404
    // app.use(m.routes());

    // 这样↓调用以后
    // 当我们访问 [OPTIONS]http://localhost:3000/v1/test2/latest
    // 返回-> ''(body为空,即网页上什么都不会显示) (Status:200 OK)
    // 然后由于是OPTIONS方法, 会返回我们所允许的方法类型
    // Allow: HEAD, GET
    // 这样当我们访问任何我们没有设置过的方法, [我们没有设置的方法]http://localhost:3000/v1/test2/latest
    // 都会返回-> Method Not Allowed (Status:405Method Not Allowed) 或则 返回 501
    // + 返回405(不允许,koa-router认识该方法但开发者没有写该方法的接口)
    // + 501(koa-router没实现,比较生僻的请求方法会返回这个)
    app.use(m.routes()).use(m.allowedMethods())
  }
}

app.listen(3000, () => {
  console.log(`server is running at 3000`);
});
